﻿using System;
using System.Collections.Generic;
using System.Data.OleDb;
using System.Linq;
using System.Web;

namespace FlyingCircusWebIS.Models
{
    public class CupomDAO : ICupomDAO
    {
        public void Adicionar(Cupom entidade)
        {
            string sqlInserir = "insert into CUPOM (CodCupom, NomeCupom, Descricao, Desconto, DataCadastro, FlagAtivo) values (?, ?, ?, ?, ?, ?)";

            // Configura o comando
            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlInserir;

            OleDbParameter pCodCupom = new OleDbParameter("CodCupom", OleDbType.VarChar);
            pCodCupom.Value = entidade.CodCupom;
            comando.Parameters.Add(pCodCupom);

            OleDbParameter pNome = new OleDbParameter("NomeCupom", OleDbType.VarChar);
            pNome.Value = entidade.NomeCupom;
            comando.Parameters.Add(pNome);

            OleDbParameter pDescricao = new OleDbParameter("Descricao", OleDbType.VarChar);
            pDescricao.Value = entidade.Descricao;
            comando.Parameters.Add(pDescricao);

            OleDbParameter pDesconto = new OleDbParameter("Desconto", OleDbType.Numeric);
            pDesconto.Value = entidade.Desconto;
            comando.Parameters.Add(pDesconto);

            OleDbParameter pDataCad = new OleDbParameter("DataCadastro", OleDbType.Date);
            pDataCad.Value = DateTime.Now;
            comando.Parameters.Add(pDataCad);

            OleDbParameter pFlagAtivo = new OleDbParameter("FlagAtivo", OleDbType.VarChar);
            pFlagAtivo.Value = entidade.FlagAtivo;
            comando.Parameters.Add(pFlagAtivo);

            // Insert
            comando.ExecuteNonQuery();
            comando.Dispose();
        }

        public void Atualizar(Cupom entidade)
        {
            string sqlAtualizar = "update CUPOM set NomeCupom = ?, Descricao = ?, Desconto = ?, FlagAtivo = ? where CodCupom = ?";

            // Configura o comando
            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlAtualizar;

            OleDbParameter pNome = new OleDbParameter("NomeCupom", OleDbType.VarChar);
            pNome.Value = entidade.NomeCupom;
            comando.Parameters.Add(pNome);

            OleDbParameter pDescricao = new OleDbParameter("Descricao", OleDbType.VarChar);
            pDescricao.Value = entidade.Descricao;
            comando.Parameters.Add(pDescricao);

            OleDbParameter pDesconto = new OleDbParameter("Desconto", OleDbType.Numeric);
            pDesconto.Value = entidade.Desconto;
            comando.Parameters.Add(pDesconto);

            OleDbParameter pFlagAtivo = new OleDbParameter("FlagAtivo", OleDbType.VarChar);
            pFlagAtivo.Value = entidade.FlagAtivo;
            comando.Parameters.Add(pFlagAtivo);

            OleDbParameter pCodCupom = new OleDbParameter("CodCupom", OleDbType.VarChar);
            pCodCupom.Value = entidade.CodCupom;
            comando.Parameters.Add(pCodCupom);

            // Update
            comando.ExecuteNonQuery();
            comando.Dispose();
        }

        private Cupom ConverterDataReaderParaObj(OleDbDataReader dr)
        {
            Cupom registro = new Cupom();
            registro.CodCupom = dr["CodCupom"].ToString();
            registro.NomeCupom = dr["NomeCupom"].ToString();
            registro.Descricao = dr["Descricao"].ToString();
            registro.Desconto = Decimal.Parse(dr["Desconto"].ToString());
            registro.DataCadastro = DateTime.Parse(dr["DataCadastro"].ToString());
            registro.FlagAtivo = dr["FlagAtivo"].ToString();

            return registro;
        }

        public List<Cupom> Listar()
        {
            String sqlConsulta = "select * from CUPOM";

            // Configura o comando
            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlConsulta;

            // Select
            OleDbDataReader dr = comando.ExecuteReader();

            List<Cupom> registros = new List<Cupom>();
            while (dr.Read())
            {
                Cupom registro = ConverterDataReaderParaObj(dr);
                registros.Add(registro);
            }
            dr.Close();
            comando.Dispose();

            return registros;
        }


        public Cupom BuscarPorCodCupom(string codigo)
        {
            Cupom registro = null;
            string sqlBuscar = "select * from CUPOM where LOWER(CodCupom) = LOWER(?)";

            // Configura o comando
            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlBuscar;

            OleDbParameter pCodCupom = new OleDbParameter("CodCupom", OleDbType.VarChar);
            pCodCupom.Value = codigo;
            comando.Parameters.Add(pCodCupom);

            // Select    
            OleDbDataReader dr = comando.ExecuteReader();
            if (dr.Read())
            {
                registro = ConverterDataReaderParaObj(dr);
            }
            dr.Close();
            comando.Dispose();

            return registro;
        }


        public void DesativarPorCodCupom(string codigo)
        {
            string sqlAtualizar = "update CUPOM set flagAtivo = 'N' where CodCupom = ?";

            // Configura o comando
            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlAtualizar;

            OleDbParameter pCod = new OleDbParameter("CodCupom", OleDbType.VarChar);
            pCod.Value = codigo;
            comando.Parameters.Add(pCod);

            // Update
            comando.ExecuteNonQuery();
            comando.Dispose();
        }

        public void AtivarPorCodCupom(string codigo)
        {
            string sqlAtualizar = "update CUPOM set flagAtivo = 'S' where CodCupom = ?";

            // Configura o comando
            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlAtualizar;

            OleDbParameter pCod = new OleDbParameter("CodCupom", OleDbType.VarChar);
            pCod.Value = codigo;
            comando.Parameters.Add(pCod);

            // Update
            comando.ExecuteNonQuery();
            comando.Dispose();
        }


        public void RemoverPorCodCupom(string codigo)
        {
            string sqlDeletar = "delete CUPOM where CodCupom = ?";

            // Configura o comando
            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlDeletar;

            OleDbParameter pCod = new OleDbParameter("CodCupom", OleDbType.VarChar);
            pCod.Value = codigo;
            comando.Parameters.Add(pCod);

            // Delete
            comando.ExecuteNonQuery();
            comando.Dispose();
        }
    }
}